// 03-app.js   

const fp = require('lodash/fp');
const { Maybe, Container } = require('./03-support');

//1.使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([5, 6, 1]);
let ex1 = () => fp.map(fp.add(1));
console.log('ex1', maybe.map(ex1()));

//2.实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do']);
let ex2 = () => fp.first;
console.log('ex2', xs.map(ex2()));

//3.实现一个函数ex3，使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function (x, o) {
    return Maybe.of(o[x]);
});
let user = {
    id: 2,
    name: 'Albert'
}
let ex3 = () => {
    return function () {
        let a = safeProp('name')(...arguments).map(fp.first);
        return a;
    }
};
let first_letter = ex3();
console.log('ex3', first_letter(user));

//4.使用Maybe重写ex4，不要有if语句
let ex4 = function (n) {
    if (n) {
        return parseInt(n);
    }
}
let my_ex4 = (n) => Maybe.of(n).map(parseInt);
console.log('ex4', ex4('1111dfff222'));
console.log('my_ex4', my_ex4('1111dfff222'));
